Docker、Go、PostgreSQL如何修改时区

您所在的位置:网站首页 go dockerfile 时区 Docker、Go、PostgreSQL如何修改时区

Docker、Go、PostgreSQL如何修改时区

2024-01-22 00:17| 来源: 网络整理| 查看: 265

本文主要介绍Docker、Go、PostgreSQL如何修改它们的时区。

首先需要知道一些基础概念:

Unix 时间戳 -是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 UTC –协调世界时,又称世界统一时间、世界标准时间、国际协调时间。 CST–可视为中国、古巴的标准时间或美国、澳大利亚的中部时间。北京时间,也就是东八区时间。 Docker

Docker 作为部署和运行应用程序的环境,默认使用 UTC 作为其容器的时区,但我们可以通过设置环境变量来修改时区。

修改的方法

在 Dockerfile 中添加以下行: ENV TZ=Asia/Shanghai 在 Kubernetes 中的 Pod 配置文件中,添加 env 字段,设置环境变量。Example: spec: containers: - name: my-container image: my-image env: - name: TZ value: Asia/Shanghai 验证在容器中使用 env 命令查看环境变量,例如 env

输出会有key为TZ,value为Asia/Shanghai表示成功

TZ=Asia/Shanghai Go

在 Go 中修改时区需要使用标准库中的 time 包。我们可以通过FixedZone来修改时区。 Example:

package main import ( "fmt" "time" ) func main() { var utcZone = time.FixedZone("UTC", 0*3600) // UTC time.Local = utcZone utcNow := time.Now() utcDate := time.Date(utcNow.Year(), utcNow.Month(), utcNow.Day(), 0, 0, 0, 0, utcNow.Location()) fmt.Printf("UTC time: %s\n", utcDate.String()) fmt.Printf("UTC timestamp: %d\n", utcDate.Unix()) var cstZone = time.FixedZone("CST", 8*3600) // 东八 time.Local = cstZone cstNow := time.Now() cstDate := time.Date(cstNow.Year(), cstNow.Month(), cstNow.Day(), 0, 0, 0, 0, cstNow.Location()) fmt.Printf("CST time: %s\n", cstDate.String()) fmt.Printf("CST timestamp: %d\n", cstDate.Unix()) } //output //UTC time: 2023-02-25 00:00:00 +0000 UTC //UTC timestamp: 1677283200 //CST time: 2023-02-25 00:00:00 +0800 CST //CST timestamp: 1677254400

在上面的代码中,我们使用time.FixedZone分别设置UTC、上海时区,并获取当天零点的时间戳 _date。

PostgreSQL

在PostgreSQL系统内部,所有日期和时间都用全球统一时间UTC格式存储, 时间在发给客户前端前由数据库服务器根据TimeZone 配置参数声明的时区转换成本地时间。

在 PostgreSQL 中,我们可以通过修改 postgresql.conf 文件来修改时区。 以下是如何在 Docker运行 PostgreSQL 中修改时区的步骤:

拷贝dockers中的 postgresql.conf到宿主主机 sudo docker cp [your_docker_contariner_id]:/var/lib/postgresql/data/postgresql.conf /[your_work_space]/ 修改配置 sudo vi /[your_work_space]/postgresql.conf

查找替换timezone为上海时区

timezone = 'Asia/Shanghai'

可以通过sql查找支持的时区:

select * from pg_timezone_names; 保存并覆盖dockers中配置 sudo docker cp /[your_work_space]/postgresql.conf [your_docker_contariner_id]:/var/lib/postgresql/data/ 重新容器 sudo docker restart [your_docker_contariner_id

现在,你的 PostgreSQL 数据库就使用了正确的时区。

检查是否设置成功 通过sql获取设置: select * from pg_db_role_setting;

也可以查看数据库中表字段格式为TimestampTZ,Example 修改前

2023-02-25 00:00:00 +0000 +00

修改后台

2023-02-25 08:00:00 +0000 +08

以上。

参考 docker 修改Env postgres.cn/docs 博客dockers-postgre 修改TimeZone


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3